package string;

public class D230812 {
    // 字符串变形
    // 1. 二次翻转
    // 大小写转换, 翻转整个字符串, 翻转单词
    public String trans(String s, int n) {
        if(n == 0) return s;
        StringBuffer res = new StringBuffer();
        for(int i = 0; i < n; i++){
            // 1. 大小写转换
            if(s.charAt(i) <= 'Z' && s.charAt(i) >= 'A')
                res.append((char)(s.charAt(i) - 'A' + 'a'));
            else if(s.charAt(i) >= 'a' && s.charAt(i) <= 'z')
                res.append((char)(s.charAt(i) - 'a' + 'A'));
            else
                // 空格直接复制
                res.append(s.charAt(i));
        }
        // 2. 翻转整个字符串
        res = res.reverse();
        for (int i = 0; i < n; i++){
            int j = i;
            // 3. 以空格为界，二次翻转，翻转单词
            while(j < n && res.charAt(j) != ' ')
                j++;
            String temp = res.substring(i,j);
            StringBuffer buffer = new StringBuffer(temp);
            temp = buffer.reverse().toString();
            res.replace(i,j,temp);
            i = j;
        }
        return res.toString();
    }
    // 2. 分割字符串 + 栈
    // 遍历字符串, 进行大小写转换, 按照空格分割单词, 存入栈中
    // 遍历结束后, 弹出栈中元素, 拼接为字符串


    // 最长公共前缀
    public String longestCommonPrefix (String[] strs) {
        int n = strs.length;
        if(n == 0) return "";

        // 遍历第一个字符串的所有字符
        for (int i = 0; i < strs[0].length(); i++) {
            char ch = strs[0].charAt(i);

            // 遍历后续的字符串
            for (int j = 1; j < strs.length; j++) {
                // 如果后续字符串的长度不够，或者不相同
                if (strs[j].length() == i || strs[j].charAt(i) != ch) {
                    // 返回 [0, 1)
                    return strs[0].substring(0, i);
                }
            }
        }
        // 第一个字符串就是公共前缀
        return strs[0];
    }
}
